package sort;

/**
 * 冒泡排序
 *
 * @author zj
 */
public class BubbleSort<T extends Comparable<T>> implements Sort<T> {
    @Override
    public void sort(T[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        for (int i = arr.length; i > 0; i--) {
            //记录本次比较是否有交换，如果某次冒泡时一次交换也没有，
            //则肯定已经排好序了，不用比了直接退出
            boolean swap = false;
            for (int j = 0; j < i - 1; j++) {
                if (arr[j + 1].compareTo(arr[j]) < 0) {
                    T tmp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = tmp;
                    swap = true;
                }
            }
            if (!swap) {
                break;
            }
        }
    }
}
